% @param[out] res 两列的元胞矩阵，第1列的意义是cm中第colidx列出现过的不同的内容，第2列的意义是相应的内容出现的行索引
function res = filterCellMatrix(cm,colidx)
%% 如果cm只有1行就直接输出，并进行警告
if size(cm,1) == 1
    warning('输入的元胞矩阵只有1行');
    res = cell(1,2);
    res{1,1} = cm{1,colidx};
    res{1,2} = 1;
    return
end
%% 检查cm中各个元素的数据类型，确保不是cell，这样做的目的是避免输入参数cm的过度封装
for i = 1:size(cm,1)
    for j = 1:size(cm,2)
        if iscell(cm{i,j})
            res = NaN;
            error('输入的元胞矩阵中的各元素的数据类型不应是cell');
        end
    end
end
%% 检查cm中第colidx列各元素的数据类型，确保是字符数组，这样做的目的是确保之后使用unique函数时不会报错
for i = 1:size(cm,1)
    if ~ischar(cm{i,colidx})
        error(['输入的元胞矩阵中第' num2str(i) '第colidx列的元素不是字符数组！']);
    end
end
%% 获取cm中第colidx列出现过的所有元素
[uniquecm, ~, ic] = unique(cm(:,colidx), 'stable'); % ic指cm(:,colidx)中的各个元素在uniquecm中的索引
res = cell(length(uniquecm),2);
res(:,1) = uniquecm;
for i = 1:length(ic)
    res{ic(i),2} = [res{ic(i),2} i];
end
end